<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
//Ultima verificacion: 08-03-2015
class Evaluacion extends CI_Controller {
	//Metodo constructor de la clase
	function __construct(){
		parent::__construct();
	}
	
	//Este metodo no se puede llamar con ajax
	//Muestra un listado con todas las evaluaciones activas o inactivas pero NO las borradas segun los filtros aplicados
	//Filtros:
	//Si idCicloLectivo es igual a cero, hay que mostrar todas las evaluaciones existentes del ciclo vigente de la asignatura seleccionada
	//Si idCicloLectivo es distinto de cero, hay que mostrar todas las evaluaciones del ciclo en cuestion de la asignatura seleccionada.
	function consultar($idCicloLectivo=null, $idAsignatura=null){
		//Primera comprobacion: Que el usuario tenga iniciada la sesion y que tenga permiso para realizar esta accion.
		if($this->session->userdata('sesionIniciada') == 'Si' && ($this->session->userdata('permisoDocente') == '1')){
			//Segunda comprobacion: Que idCicloLectivo pasado sea numerico y mayor o igual que cero. Lo mismo para la asignatura.
			if(is_numeric($idCicloLectivo) && $idCicloLectivo>=0 && is_numeric($idAsignatura) && $idAsignatura>=0){
				//Cargo el modelo donde estan los datos de los ciclos lectivos
				$this->load->model('m_ciclo_lectivo');
				
				//Busco al ciclo lectivo para corroborar que exista
				$cicloLectivo = $this->m_ciclo_lectivo->get($idCicloLectivo);
				
				//Cargo el modelo donde estan los datos de las asignaturas
				$this->load->model('m_asignatura');
				
				//Busco a la asignatura para corrobar que exista
				$asignatura = $this->m_asignatura->get($idAsignatura);
				
				//Cargo el modelo donde estan los datos de las asignaturas dictadas por los docentes
				$this->load->model('m_asignacion_docente');
				
				//Armo la restriccion para buscar si la persona logueada dicta esta asignatura
				$restriccion = " AND asignatura.idAsignatura=".$idAsignatura." AND persona.idPersona=".$this->session->userdata('idPersonaLog');
				
				//Busco si el docente dicta la asignatura pasada por la url
				$asignacion = $this->m_asignacion_docente->buscarActivos($restriccion);
				
				//Tercera comprobacion: Que el ciclo lectivo pasado por la url sea existente o bien el id sea igual a cero. Lo mismo para la asignatura. Que la asignatura sea dictada por el docente.
				//IMPORTANTE: ES NECESARIO QUE SOLO HAYA UN REGISTRO DONDE SE ASIGNA A UN DOCENTE A UNA ASIGNATURA O NO ANDARIA ESTO.
				if(($cicloLectivo->num_rows() == 1 || $idCicloLectivo==0) && ($asignatura->num_rows() == 1 || $idAsignatura==0) && ($asignacion->num_rows() == 1 || $idAsignatura==0)){
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
					//Busco todos los ciclos lectivos
					$listadoCiclosLectivos = $this->m_ciclo_lectivo->buscar();
					
					//Le paso el listado de todos los ciclos lectivos a la vista para que los muestre en un combo de filtrado
					$datos['ciclosLectivos'] = $listadoCiclosLectivos;
					
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
					//Le pasamos a la vista cual es el ciclo lectivo que debe mostrar seleccionado en el combo de filtrado.
					//Si el ciclo lectivo pasado por la url es igual a cero entonces hay que seleccionar el ciclo vigente, en caso contrario el que haya sido pasado.
					if($idCicloLectivo==0){
						//Busco el ciclo lectivo vigente
						$cicloLectivoVigente = $this->m_ciclo_lectivo->getVigente();
						
						if($cicloLectivoVigente->num_rows() == 1){
							//Le paso a la vista el id del ciclo lectivo vigente
							$datos['idCicloLectivoSel'] = $cicloLectivoVigente->row()->idCicloLectivo;
						}else{
							//No hay ciclo lectivo seleccionado ni vigente
							$datos['idCicloLectivoSel'] = 0;
						}
					}else{
						//Le paso a la vista el id del ciclo lectivo pasado por la url
						$datos['idCicloLectivoSel'] = $idCicloLectivo;
					}
					
					//Le paso a la vista el id de la asignatura para que la seleccione en el combo de filtrado
					$datos['idAsignaturaSel'] = $idAsignatura;
					
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
					//Restricciones a las asignaturas para buscar las dictadas por el docente
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
					$restriccion = "";
					if($idCicloLectivo==0){
						//Busco el ciclo lectivo vigente
						$cicloLectivoVigente = $this->m_ciclo_lectivo->getVigente();
						
						if($cicloLectivoVigente->num_rows() == 1){
							$restriccion = " AND curso.idCicloLectivo=".$cicloLectivoVigente->row()->idCicloLectivo;
						}else{
							$restriccion = " AND curso.idCicloLectivo=0";
						}
					}else{
						$restriccion = " AND curso.idCicloLectivo=".$idCicloLectivo;					
					}
					
					//Restriccion de la persona logueada. En este caso un docente
					$restriccion .= " AND persona.idPersona=".$this->session->userdata('idPersonaLog');
					
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
					//Cargo el modelo donde estan los datos de las asignaciones registradas para pedirle un listado con todas ellas
					$this->load->model('m_asignacion_docente');
					
					//Busco todas las asignaturas segun las restricciones
					$listadoAsignaciones = $this->m_asignacion_docente->buscarActivos($restriccion);
					
					//Le paso el listado de todas las asignaciones a la vista para que los muestre en un combo de filtrado
					$datos['asignaciones'] = $listadoAsignaciones;
					
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
					//Restricciones a la consulta de la busqueda de evaluaciones segun la asignatura seleccionada
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
					$restriccion2 = "";
					
					//Cargo el modelo donde estan los datos de las evaluaciones registradas para pedirle un listado con todas ellas segun las restricciones
					$this->load->model('m_evaluacion');
					
					//Restriccion segun la asignatura seleccionada
					$restriccion2 = " AND evaluacion.idAsignatura=".$idAsignatura;
					
					//Busco todas las evaluaciones segun las restricciones correspondientes, tanto activas como inactivas, menos las borradas(-1)
					$listadoEvaluaciones = $this->m_evaluacion->buscar($restriccion2);
					
					//Le paso el listado de todas las evaluaciones a la vista para que las muestre en una tabla
					$datos['evaluaciones'] = $listadoEvaluaciones;
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////	
					
					//Cargo la vista donde se muestra la tabla de evaluaciones y la guardo en una variable para pasarsela a la vista principal
					$datosPrincipal['vista'] = $this->load->view('v_evaluaciones', $datos, true);
					
					//Cargo la vista principal con los datos de la vista recien generada
					$this->load->view('v_sistema', $datosPrincipal);
				} else {
					//El o los registros no existen.
					//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
					$this->session->sess_destroy();
					//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
					redirect(site_url("inicio"));
				}
			} else {
				//Los parametros pasados no son validos para consultar los registros.
				//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
				$this->session->sess_destroy();
				//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
				redirect(site_url("inicio"));
			}
		} else {
			//El usuario no tiene permiso para realizar esta accion.
			//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
			$this->session->sess_destroy();
			//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
			redirect(site_url("inicio"));
		}
	}
	
	//Este metodo solo se puede llamar con ajax
	//Sirve para eliminar la evaluacion pasada por la url.
	//El segundo y tercer parametro indica el criterio para filtrar las evaluaciones en el resultado
	function eliminar($idEvaluacion=null, $idCicloLectivo=null, $idAsignatura=null){
		//Primera comprobacion: Que el usuario tenga iniciada la sesion y que tenga permiso para realizar esta accion.
		if($this->session->userdata('sesionIniciada') == 'Si' && ($this->session->userdata('permisoDocente') == '1')){
			//Segunda comprobacion: Que idEvaluacion pasado sea numerico y mayor que cero. Ademas que idCicloLectivo e idAsignatura pasados sean numerico y mayor que cero.
			if(is_numeric($idEvaluacion) && $idEvaluacion>0 && is_numeric($idCicloLectivo) && $idCicloLectivo>0 && is_numeric($idAsignatura) && $idAsignatura>0){
				//Cargo el modelo donde estan los datos de las evaluaciones registradas
				$this->load->model('m_evaluacion');
				
				//Busco a la evaluacion que hay que eliminar para corroborar que exista
				$evaluacion = $this->m_evaluacion->get($idEvaluacion);
				
				//Cargo el modelo donde estan los datos de los ciclos lectivos
				$this->load->model('m_ciclo_lectivo');
				
				//Busco al ciclo lectivo para corroborar que exista
				$cicloLectivo = $this->m_ciclo_lectivo->get($idCicloLectivo);
				
				//Cargo el modelo donde estan los datos de las asignaturas
				$this->load->model('m_asignatura');
				
				//Busco a la asignatura para corrobar que exista
				$asignatura = $this->m_asignatura->get($idAsignatura);
				
				//Cargo el modelo donde estan los datos de las asignaturas dictadas por los docentes
				$this->load->model('m_asignacion_docente');
				
				//Armo la restriccion para buscar si la persona logueada dicta esta asignatura y evaluacion
				$restriccion2 = "";
				if($evaluacion->num_rows() == 1){
					$restriccion2 = " AND asignatura.idAsignatura=".$evaluacion->row()->idAsignatura;
				}
				
				$restriccion = $restriccion2 . " AND asignatura.idAsignatura=".$idAsignatura." AND persona.idPersona=".$this->session->userdata('idPersonaLog');
				
				//Busco si el docente dicta la asignatura pasada por la url
				$asignacion = $this->m_asignacion_docente->buscarActivos($restriccion);
				
				//Tercera comprobacion: Que la evaluacion exista. Ademas que el ciclo lectivo y asignatura pasados por la url sean existentes. Ademas que la evaluacion haya sido creada por un docente de la asignatura.
				//IMPORTANTE: ES NECESARIO QUE SOLO HAYA UN REGISTRO DONDE SE ASIGNA A UN DOCENTE A UNA ASIGNATURA O NO ANDARIA ESTO.
				if($evaluacion->num_rows() == 1 && $cicloLectivo->num_rows() == 1 && $asignatura->num_rows() == 1 && $asignacion->num_rows() == 1){
					//Elimino a la evaluacion pasada por la url
					$respuesta = $this->m_evaluacion->eliminar($idEvaluacion, $this->session->userdata('idUsuarioLog'));
					
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
					//Busco todos los ciclos lectivos
					$listadoCiclosLectivos = $this->m_ciclo_lectivo->buscar();
					
					//Le paso el listado de todos los ciclos lectivos a la vista para que los muestre en un combo de filtrado
					$datos['ciclosLectivos'] = $listadoCiclosLectivos;
					
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
					//Le pasamos a la vista cual es el ciclo lectivo que debe mostrar seleccionado en el combo de filtrado.
					//Si el ciclo lectivo pasado por la url es igual a cero entonces hay que seleccionar el ciclo vigente, en caso contrario el que haya sido pasado.
					if($idCicloLectivo==0){
						//Busco el ciclo lectivo vigente
						$cicloLectivoVigente = $this->m_ciclo_lectivo->getVigente();
						
						if($cicloLectivoVigente->num_rows() == 1){
							//Le paso a la vista el id del ciclo lectivo vigente
							$datos['idCicloLectivoSel'] = $cicloLectivoVigente->row()->idCicloLectivo;
						}else{
							//No hay ciclo lectivo seleccionado ni vigente
							$datos['idCicloLectivoSel'] = 0;
						}
					}else{
						//Le paso a la vista el id del ciclo lectivo pasado por la url
						$datos['idCicloLectivoSel'] = $idCicloLectivo;
					}
					
					//Le paso a la vista el id de la asignatura para que la seleccione en el combo de filtrado
					$datos['idAsignaturaSel'] = $idAsignatura;
					
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
					//Restricciones a las asignaturas para buscar las dictadas por el docente
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
					$restriccion = "";
					if($idCicloLectivo==0){
						//Busco el ciclo lectivo vigente
						$cicloLectivoVigente = $this->m_ciclo_lectivo->getVigente();
						
						if($cicloLectivoVigente->num_rows() == 1){
							$restriccion = " AND curso.idCicloLectivo=".$cicloLectivoVigente->row()->idCicloLectivo;
						}else{
							$restriccion = " AND curso.idCicloLectivo=0";
						}
					}else{
						$restriccion = " AND curso.idCicloLectivo=".$idCicloLectivo;					
					}
					
					//Restriccion de la persona logueada. En este caso un docente
					$restriccion .= " AND persona.idPersona=".$this->session->userdata('idPersonaLog');
					
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
					//Cargo el modelo donde estan los datos de las asignaciones registradas para pedirle un listado con todas ellas
					$this->load->model('m_asignacion_docente');
					
					//Busco todas las asignaturas segun las restricciones
					$listadoAsignaciones = $this->m_asignacion_docente->buscarActivos($restriccion);
					
					//Le paso el listado de todas las asignaciones a la vista para que los muestre en un combo de filtrado
					$datos['asignaciones'] = $listadoAsignaciones;
					
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
					//Restricciones a la consulta de la busqueda de evaluaciones segun la asignatura seleccionada
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
					$restriccion2 = "";
					
					//Restriccion segun la asignatura seleccionada
					$restriccion2 = " AND evaluacion.idAsignatura=".$idAsignatura;
					
					//Cargo el modelo donde estan los datos de las evaluaciones registradas para pedirle un listado con todas ellas segun las restricciones
					$this->load->model('m_evaluacion');
					
					//Busco todas las evaluaciones segun las restricciones correspondientes, tanto activas como inactivas, menos las borradas(-1)
					$listadoEvaluaciones = $this->m_evaluacion->buscar($restriccion2);
					
					//Le paso el listado de todas las evaluaciones a la vista para que las muestre en una tabla
					$datos['evaluaciones'] = $listadoEvaluaciones;
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////	
					
					//Cargo la vista donde se muestra la tabla de evaluaciones
					$this->load->view('v_evaluaciones', $datos);
				} else {
					//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
					$this->session->sess_destroy();
					echo("No existe el registro seleccionado para borrar.");
				}
			} else {
				//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
				$this->session->sess_destroy();
				echo("No se ha pasado los parametros necesarios para borrar un registro.");
			}			
		} else {
			//El usuario no tiene permiso para realizar esta accion.
			//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
			$this->session->sess_destroy();
			echo("No tiene permiso para borrar un registro.");
		}
	}
	
	//Esto metodo no se puede llamar con ajax
	//Abre la pantalla con el formulario para crear una evaluacion nueva.
	//Los parametros se utilizan para seleccionar el ciclo o asignatura en los combos.
	function abrirPantallaCrear($idCicloLectivo=null, $idAsignatura=null){
	    //Primera comprobacion: Que el usuario tenga iniciada la sesion y que tenga permiso para realizar esta accion.
		if($this->session->userdata('sesionIniciada') == 'Si' && ($this->session->userdata('permisoDocente') == '1')){
			//Segunda comprobacion: Que idCicloLectivo e idAsignatura pasados sean numerico y mayor o igual que cero.
			if(is_numeric($idCicloLectivo) && $idCicloLectivo>=0 && is_numeric($idAsignatura) && $idAsignatura>=0){
				//Cargo el modelo donde estan los datos de los ciclos lectivos
				$this->load->model('m_ciclo_lectivo');
				
				//Busco al ciclo lectivo para corroborar que exista
				$cicloLectivo = $this->m_ciclo_lectivo->get($idCicloLectivo);
				
				//Cargo el modelo donde estan los datos de las asignaturas
				$this->load->model('m_asignatura');
				
				//Busco a la asignatura para corrobar que exista
				$asignatura = $this->m_asignatura->get($idAsignatura);
				
				//Cargo el modelo donde estan los datos de las asignaturas dictadas por los docentes
				$this->load->model('m_asignacion_docente');
				
				//Armo la restriccion para buscar si la persona logueada dicta esta asignatura
				$restriccion = " AND asignatura.idAsignatura=".$idAsignatura." AND persona.idPersona=".$this->session->userdata('idPersonaLog');
				
				//Busco si el docente dicta la asignatura pasada por la url
				$asignacion = $this->m_asignacion_docente->buscarActivos($restriccion);
				
				//Tercera comprobacion: Que el ciclo lectivo pasado por la url sea existente o bien el id sea igual a cero. Lo mismo para la asignatura. Que la asignatura sea dicatada por el docente logueado.
				if(($cicloLectivo->num_rows() == 1 || $idCicloLectivo==0) && ($asignatura->num_rows() == 1 || $idAsignatura==0) && ($asignacion->num_rows() == 1 || $idAsignatura==0)){
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
					//Busco todos los ciclos lectivos
					$listadoCiclosLectivos = $this->m_ciclo_lectivo->buscar();
					
					//Le paso el listado de todos los ciclos lectivos a la vista para que los muestre en un combo seleccionable
					$datos['ciclosLectivos'] = $listadoCiclosLectivos;
					
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
					//Si el ciclo lectivo pasado por la url es igual a cero entonces hay que seleccionar el ciclo vigente, en caso contrario el del que haya sido pasado
					if($idCicloLectivo==0){
						//Busco el ciclo lectivo vigente
						$cicloLectivoVigente = $this->m_ciclo_lectivo->getVigente();
						
						if($cicloLectivoVigente->num_rows() == 1){
							//Le paso a la vista el id del ciclo lectivo vigente
							$datos['idCicloLectivoSel'] = $cicloLectivoVigente->row()->idCicloLectivo;
						}else{
							//No hay ciclo lectivo seleccionado ni vigente
							$datos['idCicloLectivoSel'] = 0;
						}
					}else{
						//Le paso a la vista el id del ciclo lectivo pasado por la url
						$datos['idCicloLectivoSel'] = $idCicloLectivo;
					}
					
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
					//$datos['hashSel'] = random_string('alnum',20);
					
					//Le paso a la vista el id de la asignatura para que la seleccione en el combo de filtrado
					$datos['idAsignaturaSel'] = $idAsignatura;
					
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
					//Restricciones a las asignaturas para buscar las dictadas por el docente
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
					$restriccion = "";
					if($idCicloLectivo==0){
						//Busco el ciclo lectivo vigente
						$cicloLectivoVigente = $this->m_ciclo_lectivo->getVigente();
						
						if($cicloLectivoVigente->num_rows() == 1){
							$restriccion = " AND curso.idCicloLectivo=".$cicloLectivoVigente->row()->idCicloLectivo;
						}else{
							$restriccion = " AND curso.idCicloLectivo=0";
						}
					}else{
						$restriccion = " AND curso.idCicloLectivo=".$idCicloLectivo;					
					}
					
					//Restriccion de la persona logueada. En este caso un docente
					$restriccion .= " AND persona.idPersona=".$this->session->userdata('idPersonaLog');
					
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
					//Cargo el modelo donde estan los datos de las asignaciones registradas para pedirle un listado con todas ellas
					$this->load->model('m_asignacion_docente');
					
					//Busco todas las asignaturas segun las restricciones
					$listadoAsignaciones = $this->m_asignacion_docente->buscarActivos($restriccion);
					
					//Le paso el listado de todas las asignaciones a la vista para que las muestre en un combo seleccionable
					$datos['asignaciones'] = $listadoAsignaciones;
					
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
					//Cargo el modelo donde estan los datos de los tipos de evaluaciones registrados para pedirle un listado con todos ellos
					$this->load->model('m_tipo_evaluacion');
					
					//Busco todos los tipos de evaluaciones activos
					$listadoTiposEvaluaciones = $this->m_tipo_evaluacion->buscarActivos();
					
					//Le paso el listado de todos los tipos de evaluaciones a la vista para que los muestre en un combo seleccionable
					$datos['tiposEvaluaciones'] = $listadoTiposEvaluaciones;
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
										
					//Cargo el modelo donde estan los datos de las instituciones
					$this->load->model('m_institucion');
					
					//Busco a la institucion para saber la nota minima
					$institucion = $this->m_institucion->get(1);
					
					//Le paso la institucion a visualizar a la vista
					$datos['institucion'] = $institucion;
					
					//Cargo la vista donde se muestra el formulario para crear una evaluacion y la guardo en una variable para pasarsela a la vista principal
					$datosPrincipal['vista'] = $this->load->view('v_evaluaciones_crear', $datos, true);
					
					//Cargo la vista principal con los datos de la vista recien generada
					$this->load->view('v_sistema', $datosPrincipal);
				} else {
					//El registro seleccionado no existe
					//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
					$this->session->sess_destroy();
					//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
					redirect(site_url("inicio"));
				}
			} else {
				//No se han pasado los parametros minimos necesarios para crear un registro
				//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
				$this->session->sess_destroy();
				//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
				redirect(site_url("inicio"));
			}			
		} else {
			//El usuario no tiene permiso para realizar esta accion.
			//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
			$this->session->sess_destroy();
			//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
			redirect(site_url("inicio"));
		}
	}
	
	//Esto metodo no se puede llamar con ajax
	//Este metodo crea realmente la evaluacion. La respuesta se muestra en un iframe dentro del formulario
	function crear(){
	    //Primera comprobacion: Que el usuario tenga iniciada la sesion y que tenga permiso para realizar esta accion.
		if($this->session->userdata('sesionIniciada') == 'Si' && ($this->session->userdata('permisoDocente') == '1')){
			//Segunda comprobacion: Que se haya pasado por post el ciclo lectivo, asignatura, fecha de publicacion, nombre y el estado de la evaluacion a crear.
			if(is_numeric($this->input->post('cicloLectivo',true)) && $this->input->post('cicloLectivo',true)>0 && 
			   is_numeric($this->input->post('asignatura',true)) && $this->input->post('asignatura',true)>0 && 
			   is_numeric($this->input->post('tipoEvaluacion',true)) && $this->input->post('tipoEvaluacion',true)>=0 && 
			   $this->input->post('fechaEvaluacion',true)!="" && $this->input->post('nombre',true) != "" &&
			   ($this->input->post('recuperatorio',true) == '1' || $this->input->post('recuperatorio',true) == '0') &&
			   ($this->input->post('estado',true) == '1' || $this->input->post('estado',true) == '0')){		
				//Cargo el modelo donde estan los datos de los ciclos lectivos
				$this->load->model('m_ciclo_lectivo');
				
				//Busco al ciclo lectivo para comprobar que existe
				$cicloLectivo = $this->m_ciclo_lectivo->get($this->input->post('cicloLectivo',true));
				
				//Cargo el modelo donde estan los datos de las asignaturas
				$this->load->model('m_asignatura');
				
				//Busco a la asignatura para comprobar que existe
				$asignatura = $this->m_asignatura->get($this->input->post('asignatura',true));
				
				//Cargo el modelo donde estan los datos de las asignaturas dictadas por los docentes
				$this->load->model('m_asignacion_docente');
				
				//Armo la restriccion para buscar si la persona logueada dicta esta asignatura
				$restriccion = " AND asignatura.idAsignatura=".$this->input->post('asignatura',true)." AND persona.idPersona=".$this->session->userdata('idPersonaLog');
				
				//Busco si el docente dicta la asignatura pasada por la url
				$asignacion = $this->m_asignacion_docente->buscarActivos($restriccion);
				
				//Cargo el modelo donde estan los datos de los tipos de evaluaciones
				$this->load->model('m_tipo_evaluacion');
				
				//Busco al tipo de evaluacion para comprobar que existe
				$tipoEvaluacion = $this->m_tipo_evaluacion->get($this->input->post('tipoEvaluacion',true));
				
				//Tercera comprobacion: Que el ciclo lectivo pasado por la url sea existente. Lo mismo para la asignatura. Que la asignatura sea dictada por el docente. Que el tipo de evaluacion sea existente o bien que el id sea igual a cero.
				if($cicloLectivo->num_rows() == 1 && $asignatura->num_rows() == 1 && $asignacion->num_rows() == 1 && ($tipoEvaluacion->num_rows() == 1 || $this->input->post('tipoEvaluacion',true)==0)){
					//Cargo el modelo donde estan los datos de los archivos
					$this->load->model('m_archivo');
					
					//Detalles de las configuraciones del archivo a subir
					$config['upload_path'] = "./archivosPrivados-FPCL3QFs6DkBHihS3aJI/evaluaciones";
					$config['allowed_types'] = 'gif|jpg|png|jpeg|doc|docx|xls|xlsx|pdf|ppt|xppt|pps';
					$config['max_size'] = '10000';
					$this->load->library('upload', $config);
					
					$ultimoIdInsertado = 0;
					$archivo = '';
					//Si no se subio el archivo hacer lo siguiente
					if (!$this->upload->do_upload('archivo')){
						$mensaje = 'No se ha subido ning\u00fan archivo o su archivo est\u00e1 fuera de las especificaciones.';
					//Si se subio el archivo hacer lo siguiente
					}else{
						//Datos del archivo subido
						$upload_data = $this->upload->data();
						$archivo = $upload_data['file_name'];
						$extensionArchivo = $upload_data['file_ext'];
						
						//Mensaje que se va a mostrar
						$mensaje = 'Se ha subido el archivo correctamente.';
						
						// Determine Content Type
						switch ($upload_data['file_ext']) {
						  case ".pdf": $ctype="application/pdf"; break; 
						  case ".exe": $ctype="application/octet-stream"; break; 
						  case ".zip": $ctype="application/zip"; break; 
						  case ".doc": $ctype="application/msword"; break; 
						  case ".xls": $ctype="application/vnd.ms-excel"; break; 
						  case ".ppt": $ctype="application/vnd.ms-powerpoint"; break; 
						  case ".gif": $ctype="image/gif"; break; 
						  case ".png": $ctype="image/png"; break; 
						  case ".jpeg": 
						  case ".jpg": $ctype="image/jpg"; break; 
						  default: $ctype="application/force-download"; 
						}
						
						//Creamos el archivo en la base de datos
						$resultado = $this->m_archivo->crear(random_string('alnum',20).$upload_data['file_ext'], $this->session->userdata('idUsuarioLog'), "archivosPrivados-FPCL3QFs6DkBHihS3aJI/evaluaciones", $upload_data['file_name'], $upload_data['file_ext'], $ctype, 1, 1, $this->session->userdata('idUsuarioLog'));
						$ultimoIdInsertado = $this->db->insert_id();
					}
					
					//Cargo el modelo donde estan los datos de las evaluaciones
					$this->load->model('m_evaluacion');
					
					//Formato fecha ARGENTINA
					$fecha1=$this->input->post('fechaEvaluacion',true);
					//Formato fecha EEUU
					if($fecha1!="")$fecha2=date("Y-m-d",strtotime($fecha1));
					else $fecha2=null;
					
					//Formato fecha ARGENTINA
					$fecha3=$this->input->post('fechaResultado',true);
					//Formato fecha EEUU
					if($fecha3!="")$fecha4=date("Y-m-d",strtotime($fecha3));
					else $fecha4=null;
					
					//Creamos la evaluacion
					$resultado = $this->m_evaluacion->crear($this->input->post('asignatura',true),
															$this->input->post('recuperatorio',true),
															$this->input->post('tipoEvaluacion',true),
															$this->input->post('nombre',true),
															$this->input->post('notaMinima',true),
															$ultimoIdInsertado,
															$this->input->post('descripcion',true),
															$fecha2,
															$fecha4,
															$this->input->post('estado',true), 
															$this->session->userdata('idUsuarioLog'));
					
					if($resultado == 1){
						//Cargo el modelo donde estan los datos del timeline para cargar la novedad.
						$this->load->model('m_timeline');
						
						$ultimoRegistroCreado = $this->db->insert_id();
						
						//Creamos el registro de la novedad. TipoOperacion, idTablaOrigen, idRegistroOrigen, idTablaDestino, idRegistroDestino, fechaPasada, fechaFutura, estado
						$this->m_timeline->crear(1, 3, $ultimoRegistroCreado, 11, $asignatura->row()->idDivision, date("Y-m-d H:i:s"), $fecha2, 1);
						
						echo("<script> alert('La evaluaci\u00f3n: ".$this->input->post('nombre',true)." se ha creado correctamente.');</script>");
					}else{
						echo("<script> alert('La evaluaci\u00f3n: ".$this->input->post('nombre',true)." no se ha creado. Ha habido un error.');</script>");
					}
				} else {
					//Los registros no existen.
					//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
					$this->session->sess_destroy();			
				}
			} else {
				//No se han pasado los parametros minimos necesarios para crear un registro.
				//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
				$this->session->sess_destroy();			
			}
		} else {
			//El usuario no tiene permiso para realizar esta accion.
			//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
			$this->session->sess_destroy();			
		}
	}
	
	//Esto metodo no se puede llamar con ajax
	//Este metodo abre la pantalla con los datos de la evaluacion pasado por la url.
	//El segundo y tercer parametro solo se utilizan para volver a la pantalla consultar con el mismo criterio de filtrado o bien para avanzar o retroceder al siguiente registro.
	function abrirPantallaModificar($idEvaluacion=null, $idCicloLectivo=null, $idAsignatura=null){
	    //Primera comprobacion: Que el usuario tenga iniciada la sesion y que tenga permiso para realizar esta accion.
		if($this->session->userdata('sesionIniciada') == 'Si' && ($this->session->userdata('permisoDocente') == '1')){
			//Segunda comprobacion: Que idEvaluacion pasado sea numerico y mayor que cero. Ademas que idCicloLectivo pasado sea numerico y mayor que cero. Lo mismo para idAsignatura.
			if(is_numeric($idEvaluacion) && $idEvaluacion>0 && is_numeric($idCicloLectivo) && $idCicloLectivo>0 && is_numeric($idAsignatura) && $idAsignatura>0){
				//Cargo el modelo donde estan los datos de las evaluaciones registradas
				$this->load->model('m_evaluacion');
				
				//Busco a la evaluacion que hay que modificar para comprobar que existe
				$evaluacion = $this->m_evaluacion->get($idEvaluacion);
				
				//Cargo el modelo donde estan los datos de los ciclos lectivos
				$this->load->model('m_ciclo_lectivo');
				
				//Busco al ciclo lectivo para comprobar que existe
				$cicloLectivo = $this->m_ciclo_lectivo->get($idCicloLectivo);
				
				//Cargo el modelo donde estan los datos de las asignaturas
				$this->load->model('m_asignatura');
				
				//Busco a la asignatura para comprobar que existe
				$asignatura = $this->m_asignatura->get($idAsignatura);
				
				//Cargo el modelo donde estan los datos de las asignaturas dictadas por los docentes
				$this->load->model('m_asignacion_docente');
				
				//Armo la restriccion para buscar si la persona logueada dicta esta asignatura y evaluacion.
				$restriccion2 = "";
				if($evaluacion->num_rows() == 1){
					$restriccion2 = " AND asignatura.idAsignatura=".$evaluacion->row()->idAsignatura;
				}
				
				$restriccion = $restriccion2 . " AND asignatura.idAsignatura=".$idAsignatura." AND persona.idPersona=".$this->session->userdata('idPersonaLog');
				
				//Busco si el docente dicta la asignatura pasada por la url
				$asignacion = $this->m_asignacion_docente->buscarActivos($restriccion);
				
				//Tercera comprobacion: Que la evaluacion sea existente. Ademas que el ciclo lectivo y asignatura sean existentes. Ademas que la evaluacion sea de una asignatura dictada por el docente.
				if($evaluacion->num_rows() == 1 && $cicloLectivo->num_rows() == 1 && $asignatura->num_rows() == 1 && $asignacion->num_rows() == 1){
					//Le paso la evaluacion a modificar a la vista
					$datos['evaluacionSel'] = $evaluacion;
					
					//Le paso la evaluacion, el ciclo lectivo y asignatura que estaban seleccionados en la pantalla consultar
					$datos['idEvaluacionSel'] = $idEvaluacion;
					$datos['idCicloLectivoSel'] = $idCicloLectivo;
					$datos['idAsignaturaSel'] = $idAsignatura;
					
					//Busco a la evaluacion siguiente de la que hay que modificar
					$idEvaluacionSig = $this->m_evaluacion->getContiguo($idEvaluacion,1, $idAsignatura);
					
					//Le paso la evaluacion siguiente de la que hay que modificar a la vista
					$datos['idEvaluacionSig'] = $idEvaluacionSig;
					
					//Busco la evaluacion anterior de la que hay que modificar
					$idEvaluacionAnt = $this->m_evaluacion->getContiguo($idEvaluacion,-1, $idAsignatura);
					
					//Le paso la evaluacion anterior de la que hay que modificar a la vista
					$datos['idEvaluacionAnt'] = $idEvaluacionAnt;
					
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
					//Busco todos los ciclos lectivos
					$listadoCiclosLectivos = $this->m_ciclo_lectivo->buscar();
					
					//Le paso el listado de todos los ciclos lectivos a la vista para que los muestre en un combo seleccionable
					$datos['ciclosLectivos'] = $listadoCiclosLectivos;
					
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
					//Restricciones a las asignaturas para buscar las dictadas por el docente
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
					$restriccion = "";
					
					//Restriccion al ciclo lectivo
					$restriccion = " AND curso.idCicloLectivo=".$evaluacion->row()->idCicloLectivo;					
					
					//Restriccion de la persona logueada. En este caso un docente
					$restriccion .= " AND persona.idPersona=".$this->session->userdata('idPersonaLog');
					
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
					//Cargo el modelo donde estan los datos de las asignaciones registradas para pedirle un listado con todas ellas
					$this->load->model('m_asignacion_docente');
					
					//Busco todas las asignaturas segun las restricciones
					$listadoAsignaciones = $this->m_asignacion_docente->buscarActivos($restriccion);
					
					//Le paso el listado de todas las asignaciones a la vista para que los muestre en un combo seleccionable
					$datos['asignaciones'] = $listadoAsignaciones;
					
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
					//Cargo el modelo donde estan los datos de los tipos de evaluaciones registrados para pedirle un listado con todos ellos
					$this->load->model('m_tipo_evaluacion');
					
					//Busco todos los tipos de evaluaciones y no solo las activas
					$listadoTiposEvaluaciones = $this->m_tipo_evaluacion->buscar();
					
					//Le paso el listado de todos los tipos de evaluaciones a la vista para que los muestre en un combo seleccionable
					$datos['tiposEvaluaciones'] = $listadoTiposEvaluaciones;
					////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
					
					//Cargo la vista donde se muestra el formulario para modificar una evaluacion y la guardo en una variable para pasarsela a la vista principal
					$datosPrincipal['vista'] = $this->load->view('v_evaluaciones_modificar',$datos, true);
					
					//Cargo la vista principal con los datos de la vista para modificar un registro
					$this->load->view('v_sistema', $datosPrincipal);
				} else {
					//El o los registros no existen.
					//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
					$this->session->sess_destroy();
					//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
					redirect(site_url("inicio"));
				}
			} else {
				//Los parametros pasados no son validos para modificar un registro.
				//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
				$this->session->sess_destroy();
				//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
				redirect(site_url("inicio"));
			}
		} else {
			//El usuario no tiene permiso para realizar esta accion.
			//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
			$this->session->sess_destroy();
			//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
			redirect(site_url("inicio"));
		}
	}
	
	//Este metodo no se puede llamar con ajax
	//Este metodo realmente modifica los datos de una evaluacion.
	function modificar($idEvaluacion=null){
	    //Primera comprobacion: Que el usuario tenga iniciada la sesion y que tenga permiso para realizar esta accion.
		if($this->session->userdata('sesionIniciada') == 'Si' && ($this->session->userdata('permisoDocente') == '1')){	   
			//Segunda comprobacion: Que se haya pasado por la url el id de la evaluacion a modificar.
			//Ademas que se haya pasado por post el ciclo lectivo, asignatura, fecha de evaluacion, nombre, tipo de evaluacion y el estado de la evaluacion a modificar.
			if(is_numeric($idEvaluacion) && $idEvaluacion>0 && 
			   is_numeric($this->input->post('cicloLectivo',true)) && $this->input->post('cicloLectivo',true)>0 && 
			   is_numeric($this->input->post('asignatura',true)) && $this->input->post('asignatura',true)>0 && 
			   is_numeric($this->input->post('tipoEvaluacion',true)) && $this->input->post('tipoEvaluacion',true)>=0 && 
			   $this->input->post('fechaEvaluacion',true)!="" && $this->input->post('nombre',true) != "" && 
			   ($this->input->post('recuperatorio',true) == '1' || $this->input->post('recuperatorio',true) == '0') &&
			   ($this->input->post('estado',true) == '1' || $this->input->post('estado',true) == '0')){		
				//Cargo el modelo donde estan los datos de las evaluaciones
				$this->load->model('m_evaluacion');
				
				//Busco a la evaluacion que hay que modificar para comprobar que existe
				$evaluacion = $this->m_evaluacion->get($idEvaluacion);
				
				//Cargo el modelo donde estan los datos de los ciclos lectivos
				$this->load->model('m_ciclo_lectivo');
				
				//Busco al ciclo lectivo para comprobar que existe
				$cicloLectivo = $this->m_ciclo_lectivo->get($this->input->post('cicloLectivo',true));
				
				//Cargo el modelo donde estan los datos de las asignaturas
				$this->load->model('m_asignatura');
				
				//Busco a la asignatura para comprobar que existe
				$asignatura = $this->m_asignatura->get($this->input->post('asignatura',true));
				
				//Cargo el modelo donde estan los datos de las asignaturas dictadas por los docentes
				$this->load->model('m_asignacion_docente');
				
				//Armo la restriccion para buscar si la persona logueada dicta esta asignatura y evaluacion
				$restriccion2 = "";
				if($evaluacion->num_rows() == 1){
					$restriccion2 = " AND asignatura.idAsignatura=".$evaluacion->row()->idAsignatura;
				}
				
				$restriccion = $restriccion2." AND asignatura.idAsignatura=".$this->input->post('asignatura',true)." AND persona.idPersona=".$this->session->userdata('idPersonaLog');
				
				//Busco si el docente dicta la asignatura pasada por la url
				$asignacion = $this->m_asignacion_docente->buscarActivos($restriccion);
				
				//Cargo el modelo donde estan los datos de los tipos de evaluaciones
				$this->load->model('m_tipo_evaluacion');
				
				//Busco al tipo de evaluacion para comprobar que existe
				$tipoEvaluacion = $this->m_tipo_evaluacion->get($this->input->post('tipoEvaluacion',true));
				
				//Tercera comprobacion: Que la evaluacion pasada por la url sea existente. Lo mismo para el ciclo lectivo y la asignatura. Ademas que la asignatura sea dictada por el docente. Que el tipo de evaluacion sea existente o el id sea igual a cero.
				if($evaluacion->num_rows() == 1 && $cicloLectivo->num_rows() == 1 && $asignatura->num_rows() == 1 && $asignacion->num_rows() == 1 && ($tipoEvaluacion->num_rows() == 1 || $this->input->post('tipoEvaluacion',true)==0) ){
					//Guardamos el id del archivo actual. Cero si no tiene asignado ninguno
					$idArchivoActual = $evaluacion->row()->idArchivo;					
					
					//Resultado 0 quiere decir que nada se ha modificado
					$resultado = 0;
					
					//Cargo el modelo donde estan los datos de los archivos
					$this->load->model('m_archivo');
					
					//Detalles de las configuraciones del archivo a subir
					$config['upload_path'] = "./archivosPrivados-FPCL3QFs6DkBHihS3aJI/evaluaciones";
					$config['allowed_types'] = 'gif|jpg|png|jpeg|doc|docx|xls|xlsx|pdf|ppt|xppt|pps';
					$config['max_size'] = '10000';
					$this->load->library('upload', $config);
					
					$archivo = '';
					//Si no se subio el archivo hacer lo siguiente
					if (!$this->upload->do_upload('archivo')){
						$mensaje = 'No se ha subido ning\u00fan archivo o su archivo est\u00e1 fuera de las especificaciones.';
					//Si se subio el archivo hacer lo siguiente
					}else{
						//Datos del archivo subido
						$upload_data = $this->upload->data();
						$archivo = $upload_data['file_name'];
						$extensionArchivo = $upload_data['file_ext'];
						
						//Mensaje que se va a mostrar
						$mensaje = 'Se ha subido el archivo correctamente.';
						
						// Determine Content Type
						switch ($upload_data['file_ext']) {
						  case ".pdf": $ctype="application/pdf"; break; 
						  case ".exe": $ctype="application/octet-stream"; break; 
						  case ".zip": $ctype="application/zip"; break; 
						  case ".doc": $ctype="application/msword"; break; 
						  case ".xls": $ctype="application/vnd.ms-excel"; break; 
						  case ".ppt": $ctype="application/vnd.ms-powerpoint"; break; 
						  case ".gif": $ctype="image/gif"; break; 
						  case ".png": $ctype="image/png"; break; 
						  case ".jpeg": 
						  case ".jpg": $ctype="image/jpg"; break; 
						  default: $ctype="application/force-download"; 
						}
						
						//Si ya tenia archivo lo modificamos, si no tenia, creamos un nuevo registro en la base de datos
						$nuevoHash = random_string('alnum',20).$upload_data['file_ext'];
						
						if($idArchivoActual != 0){
							//Modificamos el archivo en la base de datos
							$resultado += $this->m_archivo->modificar($idArchivoActual, $nuevoHash, $upload_data['file_name'], $upload_data['file_ext'], $ctype);
						}else{
							//Creamos el archivo en la base de datos
							$resultado += $this->m_archivo->crear($nuevoHash, $this->session->userdata('idUsuarioLog'), "archivosPrivados-FPCL3QFs6DkBHihS3aJI/evaluaciones", $upload_data['file_name'], $upload_data['file_ext'], $ctype, 1, 1, $this->session->userdata('idUsuarioLog'));
							$idArchivoActual = $this->db->insert_id();
						}
					}
					
					//Formato fecha ARGENTINA
					$fecha1=$this->input->post('fechaEvaluacion',true);
					//Formato fecha EEUU
					if($fecha1!="")$fecha2=date("Y-m-d",strtotime($fecha1));
					else $fecha2=null;
					
					//Formato fecha ARGENTINA
					$fecha3=$this->input->post('fechaResultado',true);
					//Formato fecha EEUU
					if($fecha3!="")$fecha4=date("Y-m-d",strtotime($fecha3));
					else $fecha4=null;
					
					//Modificamos la evaluacion
					$resultado += $this->m_evaluacion->modificar($idEvaluacion, 
																$this->input->post('asignatura',true),
																$this->input->post('recuperatorio',true),
																$this->input->post('tipoEvaluacion',true),
																$this->input->post('nombre',true),
																$this->input->post('notaMinima',true),
																$idArchivoActual,
																$this->input->post('descripcion',true), 
																$fecha2,
																$fecha4,
																$this->input->post('estado',true));
					
					if($archivo != '')	echo("<script> window.parent.actualizarArchivo('".base_url() .'archivo/hash/'.$nuevoHash."');</script>");
					
					if($resultado >= 1){
						//Cargo el modelo donde estan los datos del timeline para cargar la novedad.
						$this->load->model('m_timeline');
						
						//Creamos el registro de la novedad. TipoOperacion, idTablaOrigen, idRegistroOrigen, idTablaDestino, idRegistroDestino, fechaPasada, fechaFutura, estado
						$this->m_timeline->crear(2, 3, $idEvaluacion, 11, $asignatura->row()->idDivision, date("Y-m-d H:i:s"), $fecha2, 1);
						
						echo("<script> alert('La evaluaci\u00f3n: ".$this->input->post('nombre',true)." se ha modificado correctamente.');</script>");
					}else{
						echo("<script> alert('La evaluaci\u00f3n: ".$this->input->post('nombre',true)." no se ha modificado. Ha habido un error o los datos permanecieron iguales.');</script>");
					}
				} else {
					//El o los registros no existen.
					//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
					$this->session->sess_destroy();
					//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
					redirect(site_url("inicio"));
				}
			} else {
				//Los parametros pasados no son validos para modificar un registro.
				//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
				$this->session->sess_destroy();
				//Lo redirigimos al login ya que como no se llamo con ajax se puede redirigir.
				redirect(site_url("inicio"));
			}
		} else {
			//El usuario no tiene permiso para realizar esta accion.
			//Destruimos la sesion ya que si llego hasta aca lo hizo mediante alguna tecnica no apropiada y no utilizando la interfaz del sistema.
			$this->session->sess_destroy();			
		}
	}
}